package cn.com.dcsgo.service;

import cn.com.dcsgo.common.PageInfo;
import cn.com.dcsgo.domain.dto.SysRoleQueryDTO;
import cn.com.dcsgo.domain.dto.SysRoleSaveDTO;
import cn.com.dcsgo.domain.dto.SysRoleUpdateDTO;
import cn.com.dcsgo.domain.po.SysRole;

import java.util.List;

/**
 * SysRoleService
 *
 * @author Dcsgo
 * @since 1/6/2025 下午 2:18
 */

public interface SysRoleService extends SysBaseService<SysRole> {
    /**
     * 分页条件查询角色信息
     *
     * @param pageInfo 分页条件查询参数
     * @return 分页条件查询结果
     */
    PageInfo<SysRole, SysRoleQueryDTO> page(PageInfo<SysRole, SysRoleQueryDTO> pageInfo);

    /**
     * 根据角色编号获取角色信息
     *
     * @param roleId 角色编号
     * @return 角色信息
     */
    SysRole get(Long roleId);

    /**
     * 添加角色
     *
     * @param saveDTO 角色信息
     * @return 受影响的行数
     */
    int save(SysRoleSaveDTO saveDTO);

    /**
     * 更新角色信息
     *
     * @param updateDTO 角色信息
     * @return 受影响的行数
     */
    int update(SysRoleUpdateDTO updateDTO);

    /**
     * 根据角色编号删除角色及其关联表中的数据
     *
     * @param roleId 角色编号
     * @return 受影响的行数
     */
    int remove(Long roleId);

    /**
     * 获取角色关联的菜单编号，菜单编号只包含状态为正常且为叶子节点的
     *
     * @param roleId 角色编号
     * @return 只包含状态为正常且为叶子节点的菜单编号
     */
    List<Long> getLeafMenuIds(Long roleId);

    /**
     * 保存角色菜单关联信息
     *
     * @param roleId  角色id
     * @param menuIds 菜单id集合
     * @return 受影响的行数
     */
    int save(Long roleId, List<Long> menuIds);

    /**
     * 获取当前登录用户所拥有的所有角色信息
     *
     * @return 当前登录用户所拥有的所有角色信息
     */
    List<SysRole> getAll();

    /**
     * 根据用户id获取角色id集合
     *
     * @param userId 用户id
     * @return 角色id集合
     */
    List<Long> getRoleIds(Long userId);

    /**
     * 为用户分配角色
     *
     * @param userId  用户id
     * @param roleIds 角色id集合
     * @return 受影响的行数
     */
    int saveUserRoles(Long userId, List<Long> roleIds);
}
